﻿using System.Collections.Generic;
using CTS.Com.Domain.Model;
using CTS.Data.Domain.Dao;

namespace CTS.Data.MACodes.Domain.Dao
{
    /// <summary>
    /// CodeComDao
    /// </summary>
    public class CodeComDao : GenericDao<EntitiesDataContext>
    {
        // Định nghĩa hằng file sql
        public const string CODECOMDAO_GETNAME_SQL = "CodeComDao_GetName.sql";
        public const string CODECOMDAO_GETCONTENT_SQL = "CodeComDao_GetContent.sql";
        public const string CODECOMDAO_GETDIV_SQL = "CodeComDao_GetDiv.sql";

        /// <summary>
        /// Kiểm tra tồn tại code
        /// </summary>
        public bool IsExist(string localeCd, string codeGroupCd, string codeCd, bool ignoreDeleteFlag)
        {
            // Tạo danh sách khóa chính
            var keys = new string[] { localeCd, codeGroupCd, codeCd };
            // Kết quả trả về
            return IsExist<MACode>(keys, ignoreDeleteFlag);
        }

        /// <summary>
        /// Lấy thông tin code
        /// </summary>
        public MACode GetInfo(string localeCd, string codeGroupCd, string codeCd, bool ignoreDeleteFlag)
        {
            // Tạo danh sách khóa chính
            var keys = new string[] { localeCd, codeGroupCd, codeCd };
            // Kết quả trả về
            return GetSingle<MACode>(keys, ignoreDeleteFlag);
        }

        /// <summary>
        /// Lấy tên code
        /// </summary>
        public string GetName(string localeCd, string codeGroupCd, string codeCd, bool ignoreDeleteFlag)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                CodeGroupCd = codeGroupCd,
                CodeCd = codeCd,
                IgnoreDeleteFlag = ignoreDeleteFlag
            };
            // Kết quả trả về
            return GetObjectByFile<string>(CODECOMDAO_GETNAME_SQL, param);
        }

        /// <summary>
        /// Lấy nội dung code
        /// </summary>
        public string GetContent(string localeCd, string codeGroupCd, string codeCd, bool ignoreDeleteFlag)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                CodeGroupCd = codeGroupCd,
                CodeCd = codeCd,
                IgnoreDeleteFlag = ignoreDeleteFlag
            };
            // Kết quả trả về
            return GetObjectByFile<string>(CODECOMDAO_GETCONTENT_SQL, param);
        }

        /// <summary>
        /// Lấy danh sách code theo nhóm
        /// </summary>
        public IList<KeyValueObject> GetDiv(string localeCd, string codeGroupCd, string[] skipCodes, bool ignoreDeleteFlag)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                CodeGroupCd = codeGroupCd,
                SkipCodes = skipCodes,
                IgnoreDeleteFlag = ignoreDeleteFlag
            };
            // Kết quả trả về
            return GetListByFile<KeyValueObject>(CODECOMDAO_GETDIV_SQL, param);
        }
    }
}
